#-*- coding: utf-8 -*-
import pymongo
import json
import sys


class AutoFill:
    #完成自动补齐功能
    #
    def __init__(self):
        reload(sys)
        sys.setdefaultencoding('utf8')

    def __connection(self,str):
        # 链接数据库
        connection = pymongo.MongoClient('localhost', 27017)
        db = connection['news']
        collection = db[str]
        return collection

    def __read_data(self,str):
        # 从数据库读取指定数据，以列表的方式返回
        collection = self.__connection(str)
        items = list(collection.find({}, {"news_title": 1, "_id": 0}))  # 将数据库中所有的东西存入名为items的列表list中

        new_title_list = []
        for dic in items:
            a = dic['news_title']
            new_title_list.append(a)
        return new_title_list

    def __complete_query(self,string,str):
        # 查询自动补齐，返回top5的补齐推荐
        new_title_list = self.__read_data(str)
        return [item for item in new_title_list if item.startswith(string)][:5]

    def complete_sum(self,string):
        #从热点新闻开始，遍历各个集合中的标题，进行补齐操作
        item_hot_news_sina = self.__complete_query(string, 'hot_news_sina')  # 调用实例，对“国务院”查询做自动补齐，以列表方式返回top5的补齐推荐

        item_hot_news_wangyi = self.__complete_query(string, 'hot_news_wangyi')  # 调用实例，对“国务院”查询做自动补齐，以列表方式返回top5的补齐推荐

        item_sina_news = self.__complete_query(string, 'sina_news')  # 调用实例，对“国务院”查询做自动补齐，以列表方式返回top5的补齐推荐

        item_wangyi_news = self.__complete_query(string, 'wangyi_news')  # 调用实例，对“国务院”查询做自动补齐，以列表方式返回top5的补齐推荐

        item = item_hot_news_sina + item_hot_news_wangyi + item_sina_news + item_wangyi_news

        return item[:5]



if __name__=="__main__":
    #本模块测试
    A = AutoFill()
    item = A.complete_sum('国务院') #调用实例，对“国务院”查询做自动补齐，以列表方式返回top5的补齐推荐
    item = json.dumps(item, encoding="UTF-8", ensure_ascii=False) #print items直接输出的为编码，通过此语句，将输出转为汉字
    print item